1. Technical Field of the Invention
The present invention relates in general to memory, and more particularly, by way of example but not limitation, (i) to data protection when reprogramming a memory of a microcontroller and/or (ii) to enabling in-system reprogramming of a memory of a microcontroller.
2. Description of Related Art
Electronic devices are a vital force for creating and perpetuating the engine that drives today's modern economy; concomitantly, electronic devices improve the standard of living of people in our society. Furthermore, they also play an important role in providing entertainment and other enjoyable diversions. A central component of many of these electronic devices are processing units. Processing units may be broadly divided into two categories: (i) processors used as central processing units (CPUs) of (e.g., personal) computers and (ii) embedded processors (a.k.a. microcontrollers, microprocessors, etc.) (e.g., processors operating in cars, microwaves, wireless phones, industrial equipment, televisions, other consumer electronic devices, etc.). Although CPUs of computers garner the lion's share of reports and stories presented by the popular press, they are only responsible for less than 1% of all processors sold while microntrollers are actually responsible for greater than 99% of all processors sold. Consequently, significant time and money is also expended for research and development to improve the efficiency, speed, security, feature set, etc. of microcontrollers. These aspects of microcontrollers may be improved, individually or in combination, by improving one or more of the individual aspects of which microcontrollers are composed. Exemplary relevant aspects of microcontrollers include, but are not limited to: processing core, memory, input/output (I/O) capabilities, security provisions, clocks/timers, program flow flexibility, programability, etc.
With regard to memory, Random Access Memory (RAM) is known in the art as the kind of memory that is typically used for holding data and programs that are being executed. RAMs are employed in applications in which a user desires to both read from and write to memory. Thus, RAM differs from Read-Only Memory (ROM), which can only be read from. Furthermore, unlike ROM, RAM is termed volatile storage because the contents of RAM are lost when power is no longer supplied thereto. This volatility characteristic of RAM therefore requires a prudent user to frequently save data to prevent the loss of any work that may be in progress, if/when power is lost.
Static RAM (SRAM) is a specific type of RAM that holds its data without external refresh, for as long as power is supplied to the SRAM circuit. This is in contrast with dynamic RAM (DRAM), which must be refreshed many times per second in order to retain its memory contents. Although SRAM is superior to DRAM in terms of speed of access as well as freedom from refresh requirements, using SRAM technology does not avoid one disadvantage in that the user must maintain a power supply to the SRAM memory in order for the volatile SRAM to preserve stored information. Therefore, under those unexpected circumstances in which the system experiences power loss or power failure, the user has little choice but to reprogram those lost contents of SRAM memory.
Alternatively, to better ensure preservation of memory contents, the user may load the configuration data from a permanently programmed memory (typically a programmable ROM (PROM)) each time the system is turned on. This method, however, does not provide the user with the option of reprogramming the contents of the permanently programmed memory, or altering the instructions of the program. It therefore limits the programming options of the user and offers only a means of retrieving and executing a pre-programmed set of code.
Another problem facing conventional memory configurations is that a partially reprogrammed memory presents the potential for partial or complete information loss. Unforeseen circumstances such as, by way of example only, power loss, can result in the loss of information in a partially (re-)programmed RAM. Hence, many RAM applications dictate that the user reprogram the entire available block of RAM. Traditional RAM systems provide only a single block of RAM. Thus, the user must delete and reprogram each cell of the entire single memory block. While performing the reprogramming, an incident such as the aforementioned power failure can result in the complete loss of both the reprogrammed portion of the memory as well as the originally-programmed contents of the memory. The user, once again, has no choice but to manually reenter the code, resulting in the expenditure of additional time and corresponding and other consequential loss of productivity. Therefore, conventional systems fail to provide a safeguard against unexpected loss of data or code.